import {
  Controller,
  Get,
  Query,
  Request,
  Post,
  Body,
  Param,
  Response,
  Render,
} from '@nestjs/common';

@Controller('user')
export class UserController {
  @Get()
  @Render('default/user')
  index() {
    return { name: '张三' }; // 返回一个JSON数据，可以在模板引擎中获取到该数据，不要返回string等类型
  }

  // 模拟模板引擎post传参
  @Post('doAdd')
  doAdd(@Body() data, @Response() res) {
    console.log(data);
    res.redirect('/user');
    return '增加成功';
  }

  // 通过@Query（）来获取get传值 http://localhost:3000/user/add?name=%22%E7%BD%97%E6%98%A5%22&sex=%22%E7%94%B7%22
  @Get('add')
  addData(@Query() query) {
    console.log(query);

    return '增加数据';
  }

  @Get('edit')
  editData(@Request() req) {
    console.log(req.query);

    return '通过request装饰器获取get传递的参数';
  }

  // 通过@Body()来获取post传递的参数
  @Post('create')
  create(@Body() data) {
    console.log(data);

    return '我是post方法';
  }

  // 获取动态路由参数 @Param()
  @Get('action/:id')
  getActionParam(@Param() action) {
    console.log(action);

    return '动态路由参数';
  }

  // 某些装饰器可以添加可选参数，获取对应键值
  @Get('/action/:id/:name')
  getAlter(@Param('name') name) {
    console.log(name);

    return '装饰器传递参数';
  }

  // 获取cookie
  @Get('cookie')
  getCookie(@Request() req) {
    // console.log(req.cookies.username); 未使用加盐获取cookie
    console.log(req.signedCookies.username); // 加盐后获取cookie

    return req.signedCookies.username;
  }
}
